//文件名: son/neighbortable.c
//
//描述: 这个文件实现用于邻居表的API
#include <stdlib.h>
#include <unistd.h>
#include "neighbortable.h"
#include "../topology/topology.h"

//这个函数首先动态创建一个邻居表. 然后解析文件topology/topology.dat, 填充所有条目中的nodeID和nodeIP字段, 将conn字段初始化为-1.
//返回创建的邻居表.
nbr_entry_t* nt_create()
{
  int nbr_num=topology_getNbrNum();
  nbr_entry_t* nt=(nbr_entry_t*)calloc(nbr_num,sizeof(nbr_entry_t));
  int* nbr_array=topology_getNbrArray();
  for(int i=0;i<nbr_num;i++)
  {
    nt[i].nodeID=nbr_array[i];
    nt[i].nodeIP=topology_getNodeIPfromid(nt[i].nodeID);
    nt[i].conn=-1;
  }
  free(nbr_array);
  return nt;
}

//这个函数删除一个邻居表. 它关闭所有连接, 释放所有动态分配的内存.
void nt_destroy(nbr_entry_t* nt)
{
  int nbr_num=topology_getNbrNum();
  for(int i=0;i<nbr_num;i++)
  {
    if(nt[i].conn!=-1)
      close(nt[i].conn);
  }
  free(nt);
}

//**************************UNUSED API**************************
//这个函数为邻居表中指定的邻居节点条目分配一个TCP连接. 如果分配成功, 返回1, 否则返回-1.
int nt_addconn(nbr_entry_t* nt, int nodeID, int conn)
{
  return 0;
}
//**************************UNUSED API**************************